package com.pimee.support.shiro.listener;

import java.util.concurrent.atomic.AtomicInteger;

import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListener;

import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;

/**
 * 配置session监听器
 * 
 * @author Bruce Shaw 2020年2月4日 上午12:07:45
 *
 */
@Slf4j
public class ShiroSessionListener implements SessionListener {
	/**
	 * 统计在线人数 juc包下线程安全自增
	 */
	private final AtomicInteger sessionCount = new AtomicInteger(0);

	/**
	 * 会话创建时触发
	 * 
	 * @param session
	 */
	@Override
	public void onStart(Session session) {
		// 会话创建，在线人数加一
		log.info("===> 会话创建，在线人数加一:{}", JSONObject.toJSONString(session));
		sessionCount.incrementAndGet();
		
//		log.info("===> 会话创建:{}", ShiroUtils.getEventLoginName());
	}

	/**
	 * 退出会话时触发
	 * 
	 * @param session
	 */
	@Override
	public void onStop(Session session) {
		log.info("===> 会话退出，在线人数减一:{}", session.getId());
		// 会话退出,在线人数减一
		sessionCount.decrementAndGet();
	}

	/**
	 * 会话过期时触发
	 * 
	 * @param session
	 */
	@Override
	public void onExpiration(Session session) {
		// 会话过期,在线人数减一
		log.info("===> 会话过期,在线人数减一", session.getId());
		sessionCount.decrementAndGet();
	}

	/**
	 * 获取在线人数使用
	 * 
	 * @return
	 */
	public AtomicInteger getSessionCount() {
		return sessionCount;
	}
}
